package com.csdj.t309springboot.job;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Calendar;

/**
 * “30 * * * * ?” 每半分钟触发任务
 * “30 10 * * * ?” 每小时的10分30秒触发任务
 * “30 10 1 * * ?” 每天1点10分30秒触发任务
 * “30 10 1 20 * ?” 每月20号1点10分30秒触发任务
 * “30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务
 * “30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务
 * “30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务
 * “30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务
 * “15,30,45 * * * * ?” 每15秒，30秒，45秒时触发任务
 * “15-45 * * * * ?” 15到45秒内，每秒都触发任务
 * “15/5 * * * * ?” 每分钟的每15秒开始触发，每隔5秒触发一次
 * “15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发，每隔5秒触发一次
 * “0 0/3 * * * ?” 每小时的第0分0秒开始，每三分钟触发一次
 * “0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
 * “0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
 * “0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
 * “0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
 * “0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务
 */
@Component
public class TestJob {

    private Logger log = LoggerFactory.getLogger("job");

//    @Scheduled(fixedRate = 5000)//等指定时间后执行任务 , 单位毫秒
//    @Scheduled(fixedDelay = 5000)//等上个任务执行完成后再执行下一个任务,单位毫秒
    //cron = "0 0 8 * * ?"每天 8点钟执行一次
    //cron = "0 0 8,12,15 * * ?" 8,12,15点钟
//    @Scheduled(cron = "0-3 * * * * ?")//每分钟的 0到 3秒各执行一次
//    @Scheduled(cron = "* 60 * * * ?")//



//    @Scheduled(cron = "0-59 1 * * * ?")//每50秒触发任务

    /**
     * 上午上下课
     */
    @Scheduled(cron = "0 50 7 * * ?")//“30 10 1 * * ?” 每天7点50分0秒触发任务
    public void shangWuShangKe() throws InterruptedException {
//        Thread.sleep(2000);
        start();
    }
    //“30 10 1 * * ?” //每天1点10分30秒触发任务
    @Scheduled(cron = "0 0 8-11 * * ?")//“30 10 1 * * ?” 每天8-11点0分0秒触发任务
    public void shangWuShangKe2() throws InterruptedException {
//        Thread.sleep(2000);
        start();
    }

    @Scheduled(cron = "0 50 8-11 * * ?") //每天8-11点50分0秒触发任务下课
    public void shangWuXiaKe() throws InterruptedException {
//        Thread.sleep(2000);
        start();
    }
    /**
     * 下午上下课
     */
    @Scheduled(cron = "0 30 13-16 * * ?")//“30 10 1 * * ?” 每天7点50分0秒触发任务
    public void xiaWuShangKe() throws InterruptedException {
//        Thread.sleep(2000);
        start();
    }
    //“30 10 1 * * ?” //每天1点10分30秒触发任务
    @Scheduled(cron = "0 0 8-11 * * ?")//“30 10 1 * * ?” 每天8-11点0分0秒触发任务
    public void xiaWuShangKe2() throws InterruptedException {
//        Thread.sleep(2000);
        start();
    }

    @Scheduled(cron = "0 50 8-11 * * ?") //每天8-11点50分0秒触发任务下课
    public void xiaWuXiaKe() throws InterruptedException {
//        Thread.sleep(2000);
        end();
    }

    public void start(){
        log.info("播放上课铃声");
    }
    public void end(){
        log.info("播放下课铃声");
    }

    /**
     * cron="0 0,20,30,50 8-11,13,17 ? * 2-6"
     */
    private void play(){
        Calendar calendar = Calendar.getInstance();
        int i = calendar.get(Calendar.MINUTE);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        switch(i){
            case 0:
                if(hour==13)
                    break;
                start();
            case 20:
                end();
            case 30:
                start();
            case 50:
                end();
        }

    }

}
